package cn.bugstack.mybatis.executor.keygen;

import cn.bugstack.mybatis.executor.Executor;
import cn.bugstack.mybatis.mapping.MappedStatement;

import java.sql.SQLException;
import java.sql.Statement;

/**
 * 键值生成器接口
 */
public interface KeyGenerator {

    /**
     * 在执行insert之前，获取主键值给要插入的记录
     * 如Oracle、DB2、KeyGenerator提供了processBefore()方法。
     * @param executor
     * @param ms
     * @param stmt
     * @param parameter
     * @throws SQLException
     */
    void processBefore(Executor executor, MappedStatement ms, Statement stmt, Object parameter) throws SQLException;

    /**
     * 针对自增主键的表，在插入时不需要主键，而是在插入之后获取到主键值
     * 比如MySQL、PostgreSQL，KeyGenerator提供了processAfter()方法
     * @param executor
     * @param ms
     * @param stmt
     * @param parameter
     * @throws SQLException
     */
    void processAfter(Executor executor, MappedStatement ms, Statement stmt, Object parameter) throws SQLException;

}
